package cn.kgc.kgde.bookstore.service.impl;

import cn.kgc.kgde.bookstore.entity.Book;
import cn.kgc.kgde.bookstore.mapper.BookMapper;
import cn.kgc.kgde.bookstore.service.BookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author myt
 * @since 2022-05-23
 */
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {

    @Resource
    private BookMapper bookMapper;
    //  - 查询商品 - 根据 条件查询 -
    // 条件查询 1 - 根据 出版社 查询
    // 2、根据 -  出版时间 查询
    //3、根据 - 书名 查询
    //4、根据 - 分类 查询
    //5、根据 - 价格 查询
    //6、根据 - 作者 查询
    @Override
    public IPage<Book> findBook(Book book, Integer pageNum, Integer pageSize) {
        IPage<Book> iPage = new Page<>(pageNum,pageSize);
        QueryWrapper wrapper = new QueryWrapper();
        wrapper.eq("state",1);
        if(book!=null){
            /*3、根据 - 书名 查询*/
            if (book.getBookName()!=null && book.getBookName()!=""){
                wrapper.like("bookName",book.getBookName());
            }
            /*1 - 根据 出版社 查询*/
            if (book.getPress()!=null && book.getPress()!=""){
                wrapper.like("press",book.getPress());
            }
//            2、根据 -  出版时间 查询
            if (book.getBookName()!=null ){
                wrapper.like("bookName",book.getBookName());
            }
            /*5、根据 - 价格 查询
            * 数据库数据类型 为 varchar 暂时放一下*/
            if (book.getPrice()!=null ){
                wrapper.orderByDesc("price",book.getPrice());
            }
            /*6、根据 - 作者 查询*/
            if(book.getAuthor()!=null && book.getAuthor()!=""){
                wrapper.like("author",book.getAuthor());
            }
            if(book.getCategory()!=null ){
                wrapper.eq("category",book.getCategory());
            }
        }
        iPage = this.bookMapper.selectPage(iPage,wrapper);
        return iPage;
    }
    @Override
    public IPage<Book> findBook1(Book book, Integer pageNum, Integer pageSize) {
        IPage<Book> iPage = new Page<>(pageNum,pageSize);
        QueryWrapper wrapper = new QueryWrapper();
        if(book!=null){
            /*3、根据 - 书名 查询*/
            if (book.getBookName()!=null && book.getBookName()!=""){
                wrapper.like("bookName",book.getBookName());
            }
            /*1 - 根据 出版社 查询*/
            if (book.getPress()!=null && book.getPress()!=""){
                wrapper.like("press",book.getPress());
            }
//            2、根据 -  出版时间 查询
            if (book.getBookName()!=null ){
                wrapper.like("bookName",book.getBookName());
            }
            /*5、根据 - 价格 查询
             * 数据库数据类型 为 varchar 暂时放一下*/
            if (book.getPrice()!=null ){
                wrapper.orderByDesc("price",book.getPrice());
            }
            /*6、根据 - 作者 查询*/
            if(book.getAuthor()!=null && book.getAuthor()!=""){
                wrapper.like("author",book.getAuthor());
            }
            if(book.getCategory()!=null ){
                wrapper.eq("category",book.getCategory());
            }
        }
        iPage = this.bookMapper.selectPage(iPage,wrapper);
        return iPage;
    }


    @Override
    public List<Book> listState(Integer state) {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.eq("state",state);
        List<Book> bookList =this.bookMapper.selectList(wrapper);
        return bookList;
    }

    @Override
    public void addBook(Book book) {
        this.bookMapper.insert(book);
    }

    //后台 --  修改商品状态 - 上架/下架
    @Override
    public void modifyState(Long bookId,Integer state) {
        Book book = new Book();
        book.setId( bookId );
        book.setState( state );
        this.bookMapper.updateById( book );
    }

    @Override
    public void modify(Book book) {
            this.bookMapper.updateById(book);
    }

    @Override
    public void delete(Book book) {
        System.out.println("book = " + book);
        this.bookMapper.deleteById(book);

    }

    //根据id查询
    @Override
    public Book findById(Long id) {
        return this.bookMapper.selectById( id );
    }
}
